<?php

namespace Project\PlanningPokerBundle\Classes;

/**
 * Permet de gèrer la lecture et ecrire de fichier texte au format "clé|valeur"
 * sur chaque lignes
 *
 * @author Seal
 */
abstract class AbstractParser {

    const DELIM = "|";

    private $fileName;

    function __construct($fileName) {
        $this->fileName = $fileName;
    }

    protected function getFileName() {
        return $this->fileName;
    }

    /**
     * Renvoi la clé de la ligne
     * @param type $line
     * @return type
     */
    protected function getKey($line) {
        return explode(AbstractParser::DELIM, $line)[0];
    }

    /**
     * Renvoi la valeur de la ligne
     * @param type $line
     * @return type
     */
    protected function getValue($line) {
        return explode(AbstractParser::DELIM, $line)[1];
    }

    /**
     * Renvoi l'ensemble des lignes du fichier sous forme de tableau
     * @return array
     */
    protected function getLines() {
        return file($this->fileName);
    }

    /**
     * Permet d'ajouter une ligne dans le fichier
     * @param type $key
     * @param type $value
     * @param type $keyIsUnique
     */
    public function addLine($key, $value, $keyIsUnique) {
        $donnee = file($this->getFileName());
        $fichier = fopen($this->fileName, "w");

        if (flock($fichier, LOCK_EX)) {

            foreach ($donnee as $line) {
                $nom = $this->getKey($line);
                if ($keyIsUnique) {
                    if ($nom != $key) {
                        fwrite($fichier, $line);
                    }
                } else {
                    fwrite($fichier, $line);
                }
            }
            fwrite($fichier, $key . AbstractParser::DELIM . $value . "\n");

            flock($fichier, LOCK_UN); // unlock the file
        }
        fclose($fichier);
    }

    /**
     * Supprime toutes les ligne du fichier
     */
    public function clearFile() {
        $fichier = fopen($this->fileName, "w");
        if (flock($fichier, LOCK_EX)) {
            fwrite($fichier, "");
            flock($fichier, LOCK_UN); // unlock the file
        }
        fclose($fichier);
    }

}

?>
